package cn.gdcp.demo10;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;

import java.io.File;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements IOnDataDelListener {
    private ListView lvStudent;
    private Button btnAddStu;
    private ImageView ivSearch;
    private EditText edtKey;
    private ArrayList<Student> studentArrayList = new ArrayList<>();
    private StudentAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findView();


//        studentArrayList.add(new Student("10086", "古天乐", 38));
//        studentArrayList.add(new Student("10001", "渣渣辉", 36));
//        studentArrayList.add(new Student("10002", "陈小春", 37));

        //第一个问题 数据由来
        /*studentArrayList = readDataFromDB();*/

        adapter = new StudentAdapter(MainActivity.this, studentArrayList, MainActivity.this);
        readDataFromDB();
        lvStudent.setAdapter(adapter);
        lvStudent.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Student student = studentArrayList.get(position);
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, EditActivity.class);
                intent.putExtra("STUNO", student.getStuno());
                intent.putExtra("NAME", student.getName());
                intent.putExtra("AGE", student.getAge());
                startActivityForResult(intent, 1002);
            }
        });


    }

    private void findView() {
        lvStudent = findViewById(R.id.lv_stu);
        btnAddStu = findViewById(R.id.btn_addStu);
        btnAddStu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, AddStuActivity.class);
                startActivityForResult(intent, 1001);
            }
        });

        edtKey = findViewById(R.id.edt_key);
        edtKey.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String key = edtKey.getText().toString().trim();
                searchFromDB(key);
            }
        });
        ivSearch = findViewById(R.id.img_Search);
        ivSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String key = edtKey.getText().toString().trim();
                searchFromDB(key);
            }
        });


    }

    private void searchFromDB(String key) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

        String where = "name like '%" + key +"%' OR stuno like '%" + key +"%' OR age = '" + key + "'";

        studentArrayList.clear();
        Cursor cursor = db.query("student", null, where,
                null, null, null, null, null);

        if (cursor != null && cursor.getCount() > 0) {
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                String stuno = cursor.getString(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                Student student = new Student(stuno, name, age);
                studentArrayList.add(student);
            }
        }

        adapter.notifyDataSetChanged();

        cursor.close();
        db.close();
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == 2001) {
            String no = data.getStringExtra("STUNO");
            String name = data.getStringExtra("NAME");
            int age = data.getIntExtra("AGE", 0);

            Student s = new Student(no, name, age);
            addToStudentToDB(s);
        } else if (resultCode == 3001) {
            String stuno = data.getStringExtra("STUNO");
            String name = data.getStringExtra("NAME");
            int age = data.getIntExtra("AGE", 0);

            Student s = new Student(stuno, name, age);
            UpdateStudentToDB(s);
        }
    }

    private void UpdateStudentToDB(Student s) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

        // 第一种 组装语句
        /*String sql = "update student set name = '" + s.getName() + "'," + " age = '" + s.getAge() + "' where stuno = '" + s.getStuno() + "'";
        db.execSQL(sql);
        db.close();
        readDataFromDB();*/
        //第二种方式
        ContentValues values = new ContentValues();
        values.put("name", s.getName());
        values.put("age", s.getAge());
        String where = "stuno = '" + s.getStuno() + "'";
        db.update("student", values, where, null);
        db.close();
        readDataFromDB();

    }

    private void addToStudentToDB(Student student) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

        ContentValues values = new ContentValues();
        values.put("stuno", student.getStuno());
        values.put("name", student.getName());
        values.put("age", student.getAge());
        db.insert("student", null, values);
        db.close();
        readDataFromDB();

    }

    @Override
    public void del(Student student) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

        //删除有两种 第一种是execSQL()
        /*String sql = "delete from student where stuno ='" + student.getStuno() + "'";
        db.execSQL(sql);
        db.close();
        readDataFromDB();*/

        //第二种是使用delete接口
        /*String where = "stuno ='" + student.getStuno() + "'";
        db.delete("student", where ,null);
        db.close();
        readDataFromDB();*/

        //第三种也是使用delete接口
        String where = "stuno = ? ";
        String[] argArray = {student.getStuno()};
        db.delete("student", where, argArray);
        db.close();
        readDataFromDB();


    }


    /**
     * 从数据库读取学生列表
     */
    private void readDataFromDB() {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

        String sql = "create table if not exists student(stuno varchar(20), name varchar(15), age int)";
        db.execSQL(sql);

        studentArrayList.clear();
        Cursor cursor = db.query("student", null, null,
                null, null, null, null, null);

        if (cursor != null && cursor.getCount() > 0) {
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                String stuno = cursor.getString(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                Student student = new Student(stuno, name, age);
                studentArrayList.add(student);
            }
        }

        adapter.notifyDataSetChanged();

        cursor.close();
        db.close();

    }


}


